package br.unisal.reader;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.List;

import br.unisal.domain.Cliente;
import br.unisal.domain.Entregador;
import br.unisal.domain.Pedido;
import br.unisal.domain.Produto;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class LeitorXML {

	public XStream stream = new XStream(new DomDriver());
	public FileReader readerProduto, readerCliente, readerPedido, readerEntegador;
	
	@SuppressWarnings("unchecked")
	public HashMap<Integer, Produto> leProdutos(){
		try {
			readerProduto = new FileReader("produtos.xml");
			stream.alias("produto", Produto.class);
			HashMap<Integer, Produto> produtosLidos = (HashMap<Integer, Produto>) stream.fromXML(readerProduto); 
			
			return produtosLidos;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public List<Pedido> lePedidos(){
		try {
			readerPedido = new FileReader("pedidos.xml");
			stream.alias("pedido", Pedido.class);
			List<Pedido> pedidosLidos = (List<Pedido>) stream.fromXML(readerPedido); 
			
			return pedidosLidos;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public List<Entregador> leEntregadores(){
		try {
			readerEntegador = new FileReader("entregadores.xml");
			stream.alias("entregador", Entregador.class);
			List<Entregador> entregadoresLidos = (List<Entregador>) stream.fromXML(readerEntegador); 
			
			return entregadoresLidos;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public List<Cliente> leClientes(){
		try {
			readerCliente = new FileReader("clientes.xml");
			stream.alias("cliente", Cliente.class);
			List<Cliente> clientesLidos = (List<Cliente>) stream.fromXML(readerCliente); 
			
			return clientesLidos;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public void gravaProdutosArquivo(HashMap<Integer, Produto> produtos) throws FileNotFoundException{
		stream.alias("produto", Produto.class);
		stream.setMode(XStream.NO_REFERENCES);
		PrintStream out = new PrintStream(new File("produtos.xml"));
		out.println(stream.toXML(produtos));
		out.close();
	}
	
	public void gravaClientesArquivo(List<Cliente> clientes) throws FileNotFoundException{
		stream.alias("cliente", Cliente.class);
		stream.setMode(XStream.NO_REFERENCES);
		PrintStream out = new PrintStream(new File("clientes.xml"));
		out.println(stream.toXML(clientes));
		out.close();
	}
	
	public void gravaEntregadoresArquivo(List<Entregador> entregadores) throws FileNotFoundException{
		stream.alias("entregador", Entregador.class);
		stream.setMode(XStream.NO_REFERENCES);
		PrintStream out = new PrintStream(new File("entregadores.xml"));
		out.println(stream.toXML(entregadores));
		out.close();
	}
	
	public void gravaPedidosArquivo(List<Pedido> pedidos) throws FileNotFoundException{
		stream.alias("pedido", Pedido.class);
		stream.setMode(XStream.NO_REFERENCES);
		PrintStream out = new PrintStream(new File("pedidos.xml"));
		out.println(stream.toXML(pedidos));
		out.close();
	}
}
